文章目录
  1. 1. String.prototype 工具常用类

String.prototype 工具常用类

/**
   * 扩展基础类
   * 得到字符串的长度,包括中文和英文
   **/
  String.prototype.charlen = function() {
   var arr = this.match(/[^\x00-\xff]/ig);
   return this.length + (arr == null ? 0 : arr.length);
  }
<!--more-->
// 返回字符串的长度,一个中文算2个字节(英文字母和英文标点符号一个字符占一个字节,全部把页面字符串转成字节长度,以便与数据库字段长度相匹配)  

String.prototype.ChineseLength=function()  
{    
       return this.replace(/[^\x00-\xff]/g,”**“).length;  

};  
  /**
   * 扩展基础类
   * 格式化字符串${0} -> 参考printf %s
   **/
  String.prototype.format = function() {
   var args = arguments;
   return this.replace(/\$\{(\d+)\}/g,              
    function(m, i){
     return args[i];
    });
  } 

  /**
   * 扩展基础类
   * 字符串首尾去空格
   **/
  String.prototype.trim = function() {
   return this.replace(/(^\s*)|(\s*$)/g, "");
  }

  /**
   * 扩展基础类
   * 字符串包含字符串判断
   **/
  String.prototype.contains = function(sub) {
   return this.indexOf(sub) != -1;
  }

  /**
   * 扩展基础类
   * 字符串比较大小
   **/
  String.prototype.compare = function(b) {
   if(!b)
    return -1;

   if(this.length != b.length)
    return this.length - b.length;

   var i = 0;
   for (; i < this.length; i++){
    var val = this.charCodeAt(i) - b.charCodeAt(i);
    if(val != 0)
     return val;
   }

   return 0;
  }

  /**
   * 扩展基础类
   * 替换字符
   **/
  String.prototype.replaceLen = function(start, len, replaced) {
   if(!len)
    return this;

   if(start >= this.length)
    return this;

   var returnSeg = '';
   var returnSeg2 = '';
   var i = 0;
   for (; i < this.length; i++){
    var c = this.charAt(i);
    if(i < start)
     returnSeg += c;

    if(i >= start + len)
     returnSeg2 += c;
   }

   return returnSeg + replaced + returnSeg2;
  }

  /**
   * 扩展基础类
   * 替换字符,这个在替换填入比较有用,比如***天***小时 替换为 <input />天<input />小时
   **/
  String.prototype.replaceChar = function(target, replaced, start) {
   if(!target)
    return this;

   if(!start)
    start = 0;

   var returnVal = this.substring(0, start);
   var index = 0;
   for (var i = start; i < this.length; i++) {
    var c = this.charAt(i);
    target = typeof target == 'function' ? target.call(this, index) : target;
    if (c == target) {
     returnVal += typeof replaced == 'function' ? replaced.call(this, index) : replaced;
     while (i < this.length - 1 && this.charAt(i + 1) == c) {
      i++;
     }
     index++;
    }else{
     returnVal += c;
    }
   }

   return returnVal;
  }

  /**
   * 扩展基础类
   * 克隆复制(简单copy而已)
   **/
  Array.prototype.clone = function(){
   var arr = [];
   var i = 0;
   for(; i < this.length; i++){
    switch(typeof this[i]){
     case 'object':
      var obj = {};
      for(key in this[i])
       obj[key] = this[i][key];
      arr.push(obj);
      break;
     default:
      arr.push(this[i]);
      break;
    }
   }
   return arr;
  }

  /**
   * 扩展基础类
   * 清空
   **/
  Array.prototype.clear = function() {
   this.splice(0, this.length);
  }

  /**
   * 扩展基础类
   * 数组包含元素
   **/
  Array.prototype.contains = function(el) {
   var i;
   for(i = 0; i < this.length; i++) {  
    if(this[i] == el)  
     return true;  
   }  
   return false;  
  }

  /**
   * 扩展基础类
   * 数组添加数组
   **/
  Array.prototype.merge = function(arr) {
   if(arr){
    var i;
    for(i = 0; i < arr.length; i++) {  
     this.push(arr[i]);
    }  
   }
  }

  /**
   * 扩展基础类
   * 根据值和属性获取到数组的对象下标
   **/
  Array.prototype.indexOf = function(val, field){
   var i = 0;
   for(; i < this.length; i++){
    if(this[i] && (field ? this[i][field] == val : this[i] == val)){
     return i;
    }
   }
   return -1;
  }

  /**
   * 扩展基础类
   * 最后一个下标
   **/
  Array.prototype.lastIndexOf = function(val, field){
   var i = 0;
   var max = -1;
   for(; i < this.length; i++){
    if(this[i] && (field ? this[i][field] == val : this[i] == val)){
     max = i;
    }
   }
   return max;
  }

  /**
   * 扩展基础类
   * 数组唯一
   **/
  Array.prototype.unique = function(field){
   var arr = [];

   var i = 0;
   for(; i < this.length; i++){
    var val = field ? this[i][field] : this[i];
    var index = this.lastIndexOf(val, field);
    if(index == i)
     arr.push(this[i]);
   }

   return arr;
  }

  /**
   * 扩展基础类
   * 数组最大值
   **/
  Array.prototype.max = function(field){
   var result = -1;

   var i = 0;
   for(; i < this.length; i++){
    var val = field ? this[i][field] : this[i];
    if(val > result)
     result = val;
   }

   return result;
  }

  /**
   * 扩展基础类
   * 数组最小值
   **/
  Array.prototype.min = function(field){
   var result = -1;

   var i = 0;
   for(; i < this.length; i++){
    var val = field ? this[i][field] : this[i];
    if(val < result)
     result = val;
   }

   return result;
  }

  /**
   * 扩展基础类
   * 日期格式化
   **/
  Date.prototype.format = function(pat){
   var year = this.getFullYear();
   var month = this.getMonth() + 1;
   var day = this.getDate();
   var hour = this.getHours();
   var minute = this.getMinutes();
   var second = this.getSeconds();
   // 两位补齐
   month = month > 9 ? month : "0" + month;
   day = day > 9 ? day : "0" + day;
   hour = hour > 9 ? hour : "0" + hour;
   minute = minute > 9 ? minute : "0" + minute;
   second = second > 9 ? second : "0" + second;
   if(!pat){
    pat = "yyyy-MM-dd";
   }
   pat = pat.replace(/yyyy/g, year);
   pat = pat.replace(/MM/g, month);
   pat = pat.replace(/dd/g, day);
   pat = pat.replace(/HH/gi, hour);
   pat = pat.replace(/mm/g, minute);
   pat = pat.replace(/ss/g, second);
   return pat;
  }

  // 减去时差的毫秒数(取决于使用的浏览器的locale设置)
  Date.prototype.getTime2 = function(){
//   return this.getTime();
   return this.getTime() - this.getTimezoneOffset() / 60 * 3600 * 1000;
  }

  // 日期相差天数
  Date.prototype.diff = function(date){
   return Math.ceil((this - date) / (1000 * 60 * 60 * 24));
  }

  // 日期加减计算
  Date.prototype.add = function(days){
   return new Date(this.getTime() + days * (1000 * 60 * 60 * 24));
  }

  // 日期加减计算
  Date.prototype.addMonth = function(months){
   var day = this.getDate();
   var month = this.getMonth() + 1;
   var year = this.getFullYear();
   month += months;  
   if(month > 12){
    year += Math.floor(month / 12);
    month = month % 12;
   }
   return Date.parse(month + '/' + day + '/' + year);
  }

  // 解析字符串,以默认 pat = "yyyy-MM-dd"的格式,而不是MM/dd/yyyy
  Date.parse2 = function(str, pat){
   if(str == null || str == '')
    return new Date();
   var rstr = str.replace(/(\d{4})([-\./])(\d{1,2})\2(\d{1,2})/, "$3/$4/$1");
   return new Date(Date.parse(rstr));
  }

  // 解析字符串,json date obj
  // 减去时差的毫秒数(取决于使用的浏览器的locale设置)
  Date.parse3 = function(obj){
//   return new Date(obj.time);
   return new Date(obj.time - new Date().getTimezoneOffset() / 60 * 3600 * 1000);
//   var str = obj.year + '-' + (obj.month + 1) + '-' + obj.date + ' ' + 
//    obj.hours + ':' + obj.minutes + ':' + obj.seconds;
//   return Date.parse2(str);
  }

  

其中日期部分是为了和后台json-lib交互用,用了时间戳。






把之前两次的扩展总结一下,trim 方法有四种使用方法:
trim()     去除字符串左右两端的空格
trim(“xyz”)   去除字符串左右两端的字符xyz
trim(/[0-9]/g)   去除字符串左右两端的数字
trim(0,3)   去除字符串右端3个字符
trim 方法代码如下:
String.prototype.trim = function(){
         var _argument = arguments[0]==undefined ? “
“:arguments[0];
         if(typeof(_argument)==”string”){
               return this.replace(_argument == “ “?/(^s*)|(s*$)/g
new RegExp(“(^“+_argument+”*)|(“+_argument+”*$)”,”g”),””);
         }else if(typeof(_argument)==”object”){
               return this.replace(_argument,””)
         }else if(typeof(_argument)==”number” &&
arguments.length>=1){
               return arguments.length==1?
this.substring(arguments[0]) :
this.substring(arguments[0],this.length-arguments[1]);
         }
};


//trim扩展,(注:ie和chrome,Safari都没有提供trim方法,而在firefox下却有trim方法,而且还可以用,不过最好是重写一个,以便浏览器兼容)
String.prototype.trim = function() {
         //去除左右空格
         return this.replace(/(^\s*)|(\s*$)/g,””);  
         //去除所有空格
         //return this.replace(/\s+/g, “”);
}

// 返回字符的长度,一个中文算2个  
String.prototype.ChineseLength=function()  
{    
       return this.replace(/[^\x00-\xff]/g,”**“).length;  
};
  



//判断输入是否为手机或者电话号码(国内)

String.prototype.isMobileOrPhone
= function(){

               var mobile =
/^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
               var tel = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
         return  mobile.test(this) || tel.test(this);

}



//以下是在项目中用到的基于jquery.class插件的js身份证验证类

idCardHelper.js\

文章目录
  1. 1. String.prototype 工具常用类